对于卡片生成任务,大型语言模型(LLM)缺乏为复杂概念材料编写卡片的模式
我已成功使用机器学习从解释性文本中为简单的陈述性知识生成优质的间隔重复卡片(在指导下,GPT-4 经常能够从解释性文本中为陈述性知识生成可用的间隔重复卡片),但对于更复杂的概念性材料,效果不尽如人意。这里的问题并不完全是系统生成了「不好」的卡片(至少对于卡片生成任务,如果提供了编写卡片的原则,大型语言模型(LLM)的表现可能会有所提升);更大的问题是,生成的卡片只强化了表面内容 —— 也就是字面的内容,而不是其意义或为何要关心它(基于《如何阅读一本书》- Adler 和 van Doren 的观点)。
举一个非常简单的例子,考虑 Hefferon 的《线性代数》中的定义 $1.10$:
对于一个线性方程组,如果它的非零元素行从左往右第一个非零元素,都严格比上面行的首个非零元素更靠右,并且全零行都在矩阵的底部,那么这个方程组被称为就是阶梯形方程组。
大语言模型会围绕术语提出这样的问题:
-
「线性方程组成为阶梯形必须要满足什么条件?」
- (术语 -> 定义)
-
「对于一个线性方程组而言,如果它的非零行从左往右第一个非零元素,都严格地比上面行的首个非零元素更靠右,并且全零行都在矩阵的底部,我们把这样的方程组叫做什么?」
- (定义 -> 术语)
然而,这些问题只是强化了信息,而非理解。我手动编写的问题还会包括:
- 「这个线性方程组是否是阶梯形的?为什么是/不是?<例子>」
【本行删除】
-
(例子 -> 分类)
-
「给出一个阶梯形线性方程组的例子。」
-
(类别 -> 例子)
-
以及:「给出一个非阶梯形的线性方程组的例子。」
-
-
「如何把一个线性方程组转化为阶梯形(如果可变形)?」
-
(与其他概念的关联)
-
原书的定义这里刚刚引入了高斯消元法,所以只暗示了关联(但我制卡时把它点明了)
-
并且可能还有一些轻量的解题练习:「把这个方程组转化为阶梯形(如果可转换):<例子>」。
-
-
以及许多关于这个概念目的的问题;例如:
【合并行】
【合并行】
-
「阶梯形能快速给出一个线性方程组的解集的什么信息?」
-
「阶梯形如何表明线性方程组的一个方程是否冗余?」
-
「一个有多个解的线性方程组的阶梯形会是什么样子?用一个例子解释。」
-
……等等。这些细节出现在接下来的几页中,所以人们可能会把它们当成分立的概念,单独高亮和强化。但我想强调的是,我不想在没有后续这样卡片的情况下,添加关于定义的卡片;作为读者,如果我还不知道如何提出这些问题,当我看到定义时,我会在心里添加一个「TODO」,并会去寻找这些细节。但是,至少在没有进一步指导的情况下,模型不知道这么做。(译注:让模型从上下文中 query 不就好了)
这应该不会令人感到意外。训练模型的数据不会包括大量分解复杂概念主题的抽认卡,这不是一般性的资料。在我到目前为止的简单测试中,如果我提供大量的指导,语言模型可以生成更详尽的卡片,但一套简单的提示词是不够的(如对于卡片生成任务,大型语言模型(LLM)经常需要额外的提示,来确定从何种角度制卡)。例如,我仅仅念咒「将概念应用于例子」就没获得我想要的卡片。我必须说「生成一个线性方程的例子,并提问它是否处于阶梯形式。」显然,这个模型并不太重视「通过提问具体实例来深入理解概念」这一策略。至少在编写间隔重复卡片的任务中是这样。
一个编写卡片的模式语言可能能给模型足够的指导,让它们做得更好。